import os
from datetime import datetime
import json
from mcp.server.fastmcp import FastMCP

# 初始化 MCP 服务器
mcp = FastMCP("ChartsServer")
USER_AGENT = "charts-app/1.0"
# 文件保存目录
OUTPUT_DIR = ""

@mcp.tool()
async def make_charts(result: dict) -> str:
    """
    将'sql_inquiry_server.py'中sql_inquire函数返回的SQL查询结果进行解析，提取数据并将数据转化为JSON的形式，按模板html_template形成字符串形式的图表的html，随后将html写入本地文件。
    :param result: 必要参数，字符串类型，用于表示从SQL查询结果中提取的，且按照{名称1: 数字1, 名称2: 数字2}整理成的JSON形式的数据。
    :return: html存放的路径
    """
    # 创建带时间戳的文件名
    json_data = json.dumps(result)

    html_template = f'''
    <!DOCTYPE html>
    <html style="height: 100%">
    <head>
        <meta charset="UTF-8">
        <title>ECharts 饼图示例</title>
        <!-- 引入 ECharts 文件 -->
        <script src="https://unpkg.com/echarts/dist/echarts.min.js"></script>
    </head>
    <body style="height: 100%; margin: 0">
        <!-- 为 ECharts 准备一个具备大小（宽高）的 DOM -->
        <div id="main" style="height: 100%"></div>
        <script type="text/javascript">
            // 基于准备好的 DOM，初始化 echarts 实例
            var myChart = echarts.init(document.getElementById('main'));

            // JSON 数据
            var data = {json_data};

            // 将 JSON 数据转换为 ECharts 所需的数据格式
            var seriesData = [];
            for (var key in data) {{
                if (data.hasOwnProperty(key)) {{
                    seriesData.push({{
                        value: data[key],
                        name: key
                    }});
                }}
            }}

            // 指定图表的配置项和数据
            var option = {{
                title: {{
                    text: '数据占比',
                    left: 'center'
                }},
                tooltip: {{
                    trigger: 'item'
                }},
                legend: {{
                    orient: 'vertical',
                    left: 'left'
                }},
                series: [
                    {{
                        name: '占比',
                        type: 'pie',
                        radius: '50%',
                        data: seriesData,
                        emphasis: {{
                            itemStyle: {{
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }}
                        }}
                    }}
                ]
            }};

            // 使用刚指定的配置项和数据显示图表
            myChart.setOption(option);
        </script>
    </body>
    </html>
    '''

    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"pie_chart_{timestamp}.html"
    filepath = os.path.join(OUTPUT_DIR, filename)

    try:
        # 写入文件
        with open(filepath, "w", encoding="utf-8") as f:
            f.write(html_template)

        return f"✅ 已成功写入文件: {filepath}"
    except Exception as e:
        return f"⚠️ 写入失败: {e}"

    return html_template


if __name__ == "__main__":
    # 以标准 I/O 方式运行 MCP 服务器
    mcp.run(transport='stdio')